package Modelo.DAO;

import Modelo.Util.AdministradorDeSesiones;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Grisel
 */
public abstract class DAOGenerico <objetoBD, ID extends Serializable>{
   
    public void agregar(objetoBD entidad){
        Session hibernateSession = this.obtenerSesion();
        hibernateSession.saveOrUpdate(entidad);
    }
 
    public void actualizar(objetoBD entidad){
    Session hibernateSession = this.obtenerSesion();
        hibernateSession.merge(entidad);
    }
 
    public void eliminar (objetoBD entidad){
     Session hibernateSession = this.obtenerSesion();
        hibernateSession.delete(entidad);
    }
 
    public objetoBD buscarEntidad(Query consulta){
        objetoBD objeto;
        objeto = (objetoBD) consulta.uniqueResult();
        return objeto;
    }
 
    public List obtenerTodasLasEntidades(Class clase){
        Session hibernateSession = this.obtenerSesion();
        List T = null;
        Query query = hibernateSession.createQuery("from " + clase.getName());
        T = query.list();
        return T;
    }
 
   /* public objetoBD buscarPorID(Class clazz, Integer id); tener una funcion buscar por id para los encargos.
     *  Session hibernateSession = this.obtenerSesion();
        T t = null;
        t = (T) hibernateSession.get(clazz, id);
        return t;
    */
    protected Session obtenerSesion() {
        return AdministradorDeSesiones.getSession();
    }
}